/**
 * 在异步函数中抛出异常，如果有Promise进行捕获则后序代码依然可以执行，当然异步函数内部抛出异常的后面代码不会执行
 * (同步函数中抛出异常后会直接报错，终止代码执行)
 * @returns {Promise<void>}
 */
async function foo() {
  console.log('start')
  console.log('async function run')
  // throw的异常会被作为异步函数返回的Promise的reject值
  // 需要使用catch来捕获，不然会报错UnhandledPromiseRejectionWarning
  throw new Error('this is a error...')
  //不会再执行
  console.log('end')
}

const promise = foo()
promise
  .then((res) => {
    console.log(res)
  })
  .catch((err) => {
    console.log('ddd-Error: ' + err)
  })

console.log('后序还有代码')
console.log('后序还有代码')
console.log('后序还有代码')
